﻿using Digitalmes.Domain.Entities.Mes.Masters;
using Digitalmes.Domain.ValueObjects;

namespace Digitalmes.Domain.Entities.Mes.Processes;

/// <summary>
/// 工序。
/// </summary>
/// <remarks>
/// 说明：
/// <para>1、一个工序可以对应多个工位（并行工位）。</para>
/// </remarks>
[SugarTable("proc_operation")]
public sealed class ProcOperation : AuditedEntity, ISoftDelete
{
    /// <summary>
    /// 工序编号
    /// </summary>
    [NotNull]
    public string? OpCode { get; set; }

    /// <summary>
    /// 工序名称
    /// </summary>
    [NotNull]
    public string? OpName { get; set; }

    /// <summary>
    /// 产线 Id
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 产线
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(LineId))]
    public MdLine? Line { get; set; }

    /// <summary>
    /// 产线编码
    /// </summary>
    [NotNull]
    public string? LineCode { get; set; }

    /// <summary>
    /// 工位集合（JSON数组）。
    /// </summary>
    /// <remarks>某些工位是并行执行的，所以某一工序也可以对应多个工位。</remarks>
    [NotNull]
    [SugarColumn(IsJson = true)]
    public List<WorkstationVo>? Workstations { get; set; } = [];

    /// <summary>
    /// 电子标准操作程序（文件名称）。
    /// </summary>
    public string? Esop { get; set; }

    /// <summary>
    /// 工艺分类（装配/检验/包装/运输）
    /// </summary>
    public OpClassifyEnum Classify { get; set; }

    /// <summary>
    /// 工艺类型编号。
    /// </summary>
    public string? ProcessTypeCode { get; set; }

    /// <summary>
    /// 工艺类型名称集合。
    /// </summary>
    public string? ProcessTypeName { get; set; }

    /// <summary>
    /// 排序
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    /// 启用状态（0->停用，1->启用）
    /// </summary>
    public EnabledStatusEnum Status { get; set; }

    public bool IsDeleted { get; set; }
}
